package controller

import (
	"TTMS/dao"
	"TTMS/model"
	"TTMS/utils"
	"html/template"
	"net/http"
	"strconv"
)

// Login 登录
func Login(w http.ResponseWriter, r *http.Request) {
	//判断是否已经登录
	sess0, flag := dao.IsLogin(r)
	t := &template.Template{}
	if flag {
		//已经登录过了
		if sess0.User.UserType == 0 {
			//去个人中心
			t = template.Must(template.ParseFiles("views/pages/user/login_success.html"))
		} else {
			//去管理员界面
			t = template.Must(template.ParseFiles("views/pages/manager/manager.html"))
		}
		t.Execute(w, sess0)
		return
	}
	//获取用户名和密码
	username := r.PostFormValue("username")
	password := r.PostFormValue("password")
	//获取 flag
	flag0, _ := strconv.ParseInt(r.FormValue("flag"), 10, 0)
	//对密码进行 md5 加密
	password = utils.GetMd5Password(password)
	//调用 userdao 验证用户名和方法
	user := dao.CheckUserNameAndPassword(username, password)
	if user.ID > 0 {
		//用户名和密码正确
		//生成 UUID 作为 Session 的 id
		uuid := utils.CreateUUID()
		//创建一个 Session
		sess := &model.Session{
			SessionID: uuid,
			Username:  user.Username,
			UserID:    user.ID,
			User:      user,
		}
		//将 Session 保存到数据库中
		dao.AddSession(sess)
		//创建一个 Cookie，让它与 Session 相关联
		cookie := http.Cookie{
			Name:     "user",
			Value:    uuid,
			HttpOnly: true,
		}
		//将 Cookie 发送给浏览器
		http.SetCookie(w, &cookie)
		if user.UserType == 0 {
			//去个人中心
			t = template.Must(template.ParseFiles("views/pages/user/login_success.html"))
		} else {
			//去管理员界面
			t = template.Must(template.ParseFiles("views/pages/manager/manager.html"))
		}
		t.Execute(w, sess)
	} else {
		//用户名和密码不正确
		t = template.Must(template.ParseFiles("views/pages/user/login.html"))
		if flag0 == 1 {
			t.Execute(w, "用户名或密码不正确！")
		} else {
			t.Execute(w, "")
		}
	}
}

// Register 注册用户
func Register(w http.ResponseWriter, r *http.Request) {
	//获取用户名、密码、手机号、类别
	username := r.PostFormValue("username")
	password := r.PostFormValue("password")
	phoneNum := r.PostFormValue("phoneNum")
	//对密码进行 md5 加密
	password = utils.GetMd5Password(password)
	//调用 userdao 中验证用户名的函数
	user := dao.CheckUsername(username)
	if user.ID > 0 {
		//用户名已经存在
		t := template.Must(template.ParseFiles("views/pages/user/register.html"))
		t.Execute(w, "用户名已存在！")
	} else {
		dao.AddUser(username, password, phoneNum, "/static/img/xx.png", 0)
		//用户名可用
		//t := template.Must(template.ParseFiles("views/pages/user/login.html"))
		//t.Execute(w, "")
		Login(w, r)
	}
}

// Logout 退出登录
func Logout(w http.ResponseWriter, r *http.Request) {
	//获取 cookie
	cookie, _ := r.Cookie("user")
	if cookie != nil {
		//获取 Cookie 的 Value 值
		cookieValue := cookie.Value
		//删除数据中与之对应的 Session
		dao.DeleteSession(cookieValue)
		//设置 Cookie 失效
		cookie.MaxAge = -1
		//将修改之后的 Cookie 发送给浏览器
		http.SetCookie(w, cookie)
	}
	//去首页
	IndexHandler(w, r)
}

// CheckUserName 通过发送 Ajax 请求验证用户名是否可用
func CheckUserName(w http.ResponseWriter, r *http.Request) {
	//获取用户输入的用户名
	username := r.PostFormValue("username")
	//调用 userdao 中验证用户名和密码的方法
	user := dao.CheckUsername(username)
	if user.ID > 0 {
		//用户名已存在
		w.Write([]byte("用户名已存在！"))
	} else {
		//用户名可用
		w.Write([]byte("<font style='color:green'>用户名可用！</font>"))
	}
}
